package com.quanz.ckgl.services;

import org.crank.crud.criteria.Criterion;
import org.crank.crud.criteria.OrderBy;

/**
 * 库存信息维护服务
 * 
 * @author James Quan
 * @version 2015年10月4日 下午3:12:03
 */
public interface StockService {

	/**
	 * 返回满足约束条件的库存对象集合
	 * 
	 * @param orderBy
	 *            返回结果时的排序设置
	 * @param startPosition
	 *            返回结果前 跳过的记录条数，如果设置为-1则不控制
	 * @param maxResults
	 *            返回结果的最大记录条数，如果设置为-1则不控制
	 * @param criteria
	 *            查询约束条件
	 * @return
	 */
	public Stock[] findStock(OrderBy[] orderBy, int startPosition,
			int maxResults, Criterion... criteria);

	/**
	 * 返回满足约束条件的库存对象个数
	 * 
	 * @param criteria
	 *            查询约束条件
	 * @return
	 */
	public int findStockCount(Criterion... criteria);

	/**
	 * 返回指定的库存信息
	 * 
	 * @param id
	 *            库存记录的id
	 * @return
	 */
	public Stock findStockById(long id);

	/**
	 * 建立新的库存信息
	 * 
	 * @param stock
	 * @return
	 */
	public Stock createStock(Stock stock);

	/**
	 * 保存对库存信息的修改
	 * 
	 * @param stock
	 */
	public void updateStock(Stock stock);

	/**
	 * 删除库存信息
	 * 
	 * @param stock
	 */
	public void removeStock(Stock stock);

	/**
	 * 返回满足约束条件的入库单集合
	 * 
	 * @param orderBy
	 *            返回结果时的排序设置
	 * @param startPosition
	 *            返回结果前 跳过的记录条数，如果设置为-1则不控制
	 * @param maxResults
	 *            返回结果的最大记录条数，如果设置为-1则不控制
	 * @param criteria
	 *            查询约束条件
	 * @return
	 */
	public WarehouseWarrant[] findWV(OrderBy[] orderBy, int startPosition,
			int maxResults, Criterion... criteria);

	/**
	 * 返回满足约束条件的入库单个数
	 * 
	 * @param criteria
	 *            查询约束条件
	 * @return
	 */
	public int findWVCount(Criterion... criteria);
	
	/**
	 * 入库
	 * 
	 * @param voucher
	 * @return
	 */
	public WarehouseWarrant stockIn(WarehouseWarrant voucher);
	
	/**
	 * 批量入库
	 * 
	 * @param vouchers
	 * @return
	 */
	public WarehouseWarrant[] stockIn(WarehouseWarrant[] vouchers);

	/**
	 * 返回满足约束条件的出库单集合
	 * 
	 * @param orderBy
	 *            返回结果时的排序设置
	 * @param startPosition
	 *            返回结果前 跳过的记录条数，如果设置为-1则不控制
	 * @param maxResults
	 *            返回结果的最大记录条数，如果设置为-1则不控制
	 * @param criteria
	 *            查询约束条件
	 * @return
	 */
	public DeliveryOrder[] findDV(OrderBy[] orderBy, int startPosition,
			int maxResults, Criterion... criteria);

	/**
	 * 返回满足约束条件的出库单个数
	 * 
	 * @param criteria
	 *            查询约束条件
	 * @return
	 */
	public int findDVCount(Criterion... criteria);
	
	/**
	 * 出库
	 * 
	 * @param voucher
	 * @return
	 */
	public DeliveryOrder stockOut(DeliveryOrder voucher);
	
	/**
	 * 批量出库
	 * 
	 * @param vouchers
	 * @return
	 */
	public DeliveryOrder[] stockOut(DeliveryOrder[] vouchers);
}
